Software applications are often described in terms of the services provided by the applications to the end users. A service is a function provided by the application and may call on other services to accomplish the function.
Some large-scale applications are distributed in order to make efficient use of the computing power available in multiple systems. Not only are complex applications commonly distributed across multiple systems, but the systems are distributed between multiple data centers. The distances that separate data centers may range from city-to-city, country-to-country, or even continent-to continent, depending on the application requirements. Not only may an application be distributed between data centers, but the services provided by the application may also be distributed between data centers.
Within a data center, various computing systems (“servers”) may be interconnected to form clusters that are dedicated to performing one or more tasks associated with one or more applications. The number of servers in a cluster is selected as a function of the anticipated computing requirements of the application and the computing capacity of the servers.
Deploying a distributed application in a large-scale computing environment is a complex task. The process of selecting which services should be provided by which data centers, which servers should be clustered, and which tasks should be performed by which clusters requires significant analysis of the computing demands of the application and the capacities of both the hardware and software. A great deal of estimation may be involved. Furthermore, the software itself may be configurable to be more responsive to users. For example, application tasks are assigned to application processes, and each process may have a certain capacity for processing tasks, for example, thread count.
A system and method that address the aforementioned problems, as well as other related problems, are therefore desirable.